package Z01YiChang;

public class YC05YIChangZiDingYi {}

class EnemyHeroIsDeadException extends Exception{
    /**
     * 一个英雄攻击另一个英雄的时候，如果发现另一个英雄已经挂了，就会抛出EnemyHeroIsDeadException
     * 创建一个类EnemyHeroIsDeadException，并继承Exception
     * 提供两个构造方法
     * 1. 无参的构造方法
     * 2. 带参的构造方法，并调用父类的对应的构造方法
     */
    public EnemyHeroIsDeadException(){

    }

    public EnemyHeroIsDeadException(String msg){
        super(msg);
    }
}

class Test{
    public String name;
    public float hp;
    public void attackHero(Hero h) throws EnemyHeroIsDeadException{
        if (h.hp == 0) {
            throw new EnemyHeroIsDeadException(h.name + "义兄挂掉了，技能无效");
        }
    }

    public String toString(){
        return name;
    }
    class EnemyHeroIsDeadException extends Exception{
        public EnemyHeroIsDeadException(){}
        public EnemyHeroIsDeadException(String msg){
            super(msg);
        }
    }

    public static void main(String[] args) {
        Hero garen = new Hero();
        garen.name = "盖伦";
        garen.hp = 616;

        Hero teemo = new Hero();
        teemo.name = "提莫";
        teemo.hp = 0 ;

        try {
            garen.attackHero(teemo);
        } catch (Exception e) {
            e.printStackTrace();
        }
//        catch (EnemyHeroIsDeadException e){
//            System.out.println("异常原因" + e.getMessage());
//            e.printStackTrace();
//        }


    }
}

class Hero{
    String name;   // 姓名
    float hp;      // 血量
    float armor;   // 护甲
    int moveSpeed;


    public void attackHero(Hero teemo) {
        System.out.println("攻击");
    }
}

/**
 * 对MyStringBuffer的插入和删除方法中的边界条件判断，用抛出异常来解决
 * 例: insert(int pos, String b) , 当pos 是负数的时候，抛出自定义异常
 * 需要实现自定义两种异常
 * IndexIsNagetiveException 下标为负异常
 * IndexIsOutofRangeException 下标超出范围异常
 * 以下是需要调用这些异常的场景：
 * pos<0
 * 抛出 IndexIsNagetiveException
 * pos>length
 * 抛出 IndexIsOutofRangeException
 * null==b
 * 抛出 NullPointerException
 * start<0
 * 抛出 IndexIsNagetiveException
 * start>length
 * 抛出 IndexIsOutofRangeException
 * end<0
 * 抛出 IndexIsNagetiveException
 * end>length
 * 抛出 IndexIsOutofRangeException
 * start>=end
 * 抛出 IndexIsOutofRangeException
 * 注意： 接口IStringBuffer中声明的方法需要抛出异常
 */